package com.arron.principle.ocp.improve;

/* 开闭原则
基本介绍
1) 开闭原则（Open Closed Principle）是编程中最基础、最重要的设计原则
2) 一个软件实体如类，模块和函数应该对扩展开放(对提供方)，对修改关闭(对使用
方)。用抽象构建框架，用实现扩展细节。
3) 当软件需要变化时，尽量通过扩展软件实体的行为来实现变化，而不是通过修改已
有的代码来实现变化。
4) 编程中遵循其它原则，以及使用设计模式的目的就是遵循开闭原则。
 */
public class Ocp {
    public static void main(String[] args) {
        GraphicEditor editor = new GraphicEditor();
        editor.drawGraphic(new Circle());
        editor.drawGraphic(new Rectangle());
        editor.drawGraphic(new Square());
        editor.drawGraphic(new Triangle());
    }
}

class GraphicEditor{
    public void drawGraphic(Shape shape){
        shape.draw();
    }
}

abstract class Shape{
    int m_type;
    abstract void draw();
}

class Rectangle extends Shape{
    public Rectangle() {
        m_type=1;
    }

    @Override
    public void draw() {
        System.out.println("绘制矩形");
    }
}

class Circle extends Shape{
    public Circle() {
        m_type=2;
    }

    @Override
    public void draw() {
        System.out.println("绘制圆形");
    }
}

//新增加方形类
class Square extends Shape{
    public Square() {
        m_type=3;
    }

    @Override
    public void draw() {
        System.out.println("绘制方形");
    }
}

class Triangle extends Shape{
    public Triangle() {
        m_type=4;
    }

    @Override
    public void draw() {
        System.out.println("绘制三角形");
    }
}


